'use strict';
// 导入发送邮件的依赖模块
const nodemailer = require('nodemailer');
// 谁发送邮件
const FROM_EMAIL = "1217245503@qq.com";
// 配置发送类型
const transporter = nodemailer.createTransport({
    host: "smtp.qq.com", //邮箱服务器  这里我用的qq邮箱 smtp.qq.com   smtp.163.com
    port: 465, //邮箱使用端口
    secure: true, //是否使用默认的465端口
    auth: {
        user: FROM_EMAIL,
        pass: "iefheingqhpcgcaa"
    }
});
// 编写发送邮件的方法
function sendMail(option) {
    return new Promise((resolve, reject) => {
        nodemailer.createTestAccount((err) => {
            if (err) return reject("创建失败");
            transporter.sendMail(option, (error) => {
				// console.log("失败的原因:",error);
                if (error) return reject("发送失败");
                resolve({
					code: 200,
					msg: "发送成功"
				});
            });
        })
    })
}
// 编写方法  生成随机4位字符  
const getRandomCode = ()=> Math.random().toString().slice(-4);
// 获取集合的引用
const db = uniCloud.database();
// 获取 `verifys` 集合的引用
const verifysCollection = db.collection('verifys');

// 处理发送邮件的功能
exports.main = async (event, context) => {
	// 给谁发送邮件(用户邮箱)
	const TO_EMAIL =  event.email;
	// 判断前端是否提交参数（邮箱是否有值）
	if(TO_EMAIL){
		// 获取时间戳
		const createAt = new Date().getTime();
		// 验证码
		const email_code = getRandomCode();
		
		// 再次判断邮箱和验证码是否已经存在
		// 添加验证码和邮箱到云数据库
		await verifysCollection.add({email: TO_EMAIL , codeNum: email_code, createAt: createAt})
		.then(
			res=> {
				console.log("添加结果:",res)
			}
		)
		.catch(
			err=> {
				console.log("添加失败:",err)
			}
		)
		
		
		// 以下发送邮件的信息
		const email = {
		    title: `掌上刷题宝---邮箱验证码`,
		    body: `
		      <h1>您好：</h1>
		      <p style="font-size: 18px;color:#000;">
		       您的验证码为：
		      <span style="font-size: 16px;color:#f00;"><b>${email_code}</b>,</span>
		      <p>您当前正在掌上刷题宝账号，验证码告知他人将会导致数据信息被盗，请勿泄露!</p>
		      </p>
		      <p style="font-size: 1.5rem;color:#999;">60秒内有效</p>
		      `
		}
		
		let option  = {
		    from: FROM_EMAIL, // 发件人地址
		    to: TO_EMAIL, // 收件人地址，多个收件人可以使用逗号分隔
		    subject: email.title, // 邮件标题
		    html: email.body // 邮件内容
		}
		// 执行发送邮件的方法
		return await sendMail(option);
		
	}
	else {
		// 没有参数
		return await {code: 0,msg: "初始化云函数"}
	}
};
